/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package newServer;

/**
 *
 * @author Dieter Van der Stock
 */
import java.nio.channels.SocketChannel;
import java.util.LinkedList;
import java.util.List;

public class EchoWorker implements Runnable {

    private List queue = new LinkedList();

    public void verwerkData(Server server, SocketChannel socketKanaal, byte[] data, int aantalBytes) {
        //we krijgen nieuwe data binnen van een serverobject (moet dat wel?) met bijhorende info zoals herkomst
        byte[] dataKopie = new byte[aantalBytes];
        System.arraycopy(data, 0, dataKopie, 0, aantalBytes);
        synchronized (queue) {
            //we maken een nieuw dataEvent aan en steken het in de queue
            queue.add(new ServerDataEvent(server, socketKanaal, dataKopie));
            queue.notify(); //even laten weten dat er iets nieuws instaat
        }
    }

    public void run() {
        ServerDataEvent dataEvent;

        while (true) {
            synchronized (queue) {
                //Zolang er door verwerkData niets nieuw in de queue gezet wordt, wachten we
                while (queue.isEmpty()) {
                    try {                         
                        queue.wait();
                    } catch (InterruptedException e) {
                        //Hier doen we niet echt iets mee..
                    }
                }
                //Er is iets toegevoegd, we halen het uit de queue en steken het in een dataEvent
                dataEvent = (ServerDataEvent) queue.remove(0);
            }

            // We sturen het (voorlopig) gewoon (enkel) naar de oorsprong terug
            // (na een tijdje vervangen om met getters te werken denk ik
            //CHAT: hier moet ik mss al een lijst meegegeven met alle sockets ofzo waarnaar geschreven moet worden
            //dataEvent.server.stuurBericht(dataEvent.socketKanaal, dataEvent.data);
        }
    }
}

